#!/usr/bin/env bash

# Copyright © 2023 OpenIM. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
source "${OPENIM_ROOT}/scripts/install/common.sh"

cd "$OPENIM_ROOT"

openim::util::check_docker_and_compose_versions

progress() {
  local _main_pid="$1"
  local _length=20
  local _ratio=1
  local _colors=("31" "32" "33" "34" "35" "36" "37")
  local _wave=("▁" "▂" "▃" "▄" "▅" "▆" "▇" "█" "▇" "▆" "▅" "▄" "▃" "▂")
  
  while pgrep -P "$_main_pid" &> /dev/null; do
    local _mark='>'
    local _progress_bar=
    for ((i = 1; i <= _length; i++)); do
      if ((i > _ratio)); then
        _mark='-'
      fi
      _progress_bar="${_progress_bar}${_mark}"
    done
    
    local _color_idx=$((_ratio % ${#_colors[@]}))
    local _color_prefix="\033[${_colors[_color_idx]}m"
    local _reset_suffix="\033[0m"
    
    local _wave_idx=$((_ratio % ${#_wave[@]}))
    local _wave_progress=${_wave[_wave_idx]}
    
    printf "Progress: ${_color_prefix}${_progress_bar}${_reset_suffix} ${_wave_progress}   Countdown: %2ds \r" "$_countdown"
    ((_ratio++))
    ((_ratio > _length)) && _ratio=1
    sleep 0.1
  done
}

countdown() {
  local _duration="$1"
  
  for ((i = _duration; i >= 1; i--)); do
    printf "\rCountdown: %2ds \r" "$i"
    sleep 1
  done
  printf "\rCountdown: %2ds \r" "$_duration"
}

do_sth() {
  echo "++++++++++++++++++++++++"
  progress $$ &
  local _progress_pid=$!
  local _countdown=30
  
  countdown "$_countdown" &
  local _countdown_pid=$!
  
  sleep 30
  
  kill "$_progress_pid" "$_countdown_pid"
  
  "${SCRIPTS_ROOT}/check-all.sh"
  echo -e "${PURPLE_PREFIX}=========> Check docker-compose status ${COLOR_SUFFIX} \n"
}

set -e

do_sth &
do_sth_pid=$(jobs -p | tail -1)

progress "${do_sth_pid}" &
progress_pid=$(jobs -p | tail -1)

wait "${do_sth_pid}"
printf "Progress: done                \n"
